/**
 * 
 */
package talayaco.manager;

import java.util.Date;
import java.util.List;
import java.util.Map;

import talayaco.vo.CorralVO;
import talayaco.vo.ReportePesajesVO;

/**
 * @author Lucas
 * 
 */
public interface GestionCorralesMAN {

	/**
	 * Este metodo recibe los datos de un corral y lo agrega al sistema
	 * 
	 * @param nombreCorral
	 *            nombre del corral
	 * @param tipoCorral
	 *            tipo de corral
	 */
	void insertCorral(String nombreCorral, String tipoCorral) throws Exception;

	/**
	 * Este metodo actualiza los datos del corral pasado como parametro
	 * 
	 * @param nombreCorral
	 *            nombre del corral
	 * @param tipoCorral
	 *            tipo de corral
	 */
	void updateCorral(String nombreCorral, String tipoCorral) throws Exception;

	/**
	 * Este metodo elimina el corral pasado como parametro
	 * 
	 * @param corral
	 *            nombre del corral a eliminar
	 */
	void deleteCorral(String corral) throws Exception;

	/**
	 * Este metodo retorna los datos de un corral a partir de su nombre
	 * 
	 * @param corral
	 *            nombre del corral
	 * @return mapa con todos los datos del corral
	 */
	Map<String, String> getCorralByNombre(String corral) throws Exception;

	/**
	 * Este metodo retorna una lista de los nombres de los corrales
	 * 
	 * @return listado de corrales
	 */
	String[] getNombreCorrales() throws Exception;

	/**
	 * Este metodo retorna una lista de los nombres de los corrales para el
	 * reporte
	 * 
	 * @return listado de corrales
	 */
	String[] getNombreCorralesReporte() throws Exception;

	/**
	 * Este metodo determina si el corral que se desea ingresar ya existe en el
	 * sistema
	 * 
	 * @param corral
	 *            el corral a ingresar
	 * @return true si ya existe, false de lo contrario
	 */
	Boolean existeCorral(String nombre) throws Exception;

	/**
	 * Este metodo determina si ya se realizo un ingreso de pesajes en el dia
	 * pasado ocmo parametro
	 * 
	 * @param fecha
	 *            Fecha del ingreso de pesajes
	 * @return true si ya existe, false de lo contrario
	 */
	Boolean existePesajeFecha(String fecha) throws Exception;

	/**
	 * Metodo que obtiene el tipo a partir del nombre de un corral
	 * 
	 * @param nombre
	 *            Nombre corral
	 * @return Tipo del corral
	 * @throws Exception
	 */
	String getTipoAnimalByNombre(String nombre) throws Exception;

	/**
	 * Metodo que permite el el ingreso de pesajes
	 * 
	 * @param datosPesajes
	 *            Datos de los pesajes
	 * @param fecha
	 *            Fecha ingreso pesaje
	 * @throws Exception
	 */
	void insertPesajes(String[][] datosPesajes, Date fecha) throws Exception;

	/**
	 * Actualiza el corral de un animal con caravana
	 * 
	 * @param Caravana
	 *            Numero de caravana
	 * 
	 * @throws Exception
	 */
	void updateMovimientoByCaravana(Map<String, String> datosAnimal)
			throws Exception;

	/**
	 * Actualiza el corral de un animal con caravana
	 * 
	 * @param Caravana
	 *            Numero de caravana
	 * 
	 * @throws Exception
	 */
	void updateCorralAnimal(Map<String, String> datosAnimal) throws Exception;

	/**
	 * Retorna si existen o no relaciones entre la tabla animal y
	 * corral_cantidad y un nombre de corral.
	 * 
	 * @param nombre
	 *            Nombre corral
	 * @return True si existe relaciones , false caso contrario
	 */
	Boolean existeDatosCorral(String nombre) throws Exception;

	/**
	 * Obtiene los datos para el reporte de corrales
	 * 
	 * @return Lista de VO de corral
	 * @throws Exception
	 */
	List<CorralVO> getReporteCorrales() throws Exception;

	/**
	 * Obtiene los datos para el reporte de pesajes
	 * 
	 * @param nombre
	 *            Corral
	 * @param fechaDesde
	 *            Fecha desde
	 * @param fechaHasta
	 *            Fecha Hasta
	 * @return Lista de VO de pesajes
	 * @throws Exception
	 */
	List<ReportePesajesVO> getReportePesajes(String nombre, Date fechaDesde,
			Date fechaHasta) throws Exception;

}
